/******************************************************************************* * Copyright (c) 2003, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.internal.progress; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.osgi.util.NLS; /** * The TaskInfo is the info on a task with a job. It is assumed that there is * only one task running at a time - any previous tasks in a Job will be * deleted. */ public class TaskInfo extends SubTaskInfo { double preWork = 0; int totalWork = 0; /** * Create a new instance of the receiver with the supplied total work and * task name. * * @param parentJobInfo * @param infoName * @param total */ TaskInfo(JobInfo parentJobInfo, String infoName, int total) { super(parentJobInfo, infoName); totalWork = total; } /** * Add the work increment to the total. * * @param workIncrement */ void addWork(double workIncrement) { // Don't bother if we are indeterminate if (totalWork == IProgressMonitor.UNKNOWN) { return; } preWork += workIncrement; } /** * Add the amount of work to the recevier. Update a parent monitor by the * increment scaled to the amount of ticks this represents. * * @param workIncrement * int the amount of work in the receiver * @param parentMonitor * The IProgressMonitor that is also listening * @param parentTicks * the number of ticks this monitor represents */ void addWork(double workIncrement, IProgressMonitor parentMonitor, int parentTicks) { // Don't bother if we are indeterminate if (totalWork == IProgressMonitor.UNKNOWN) { return; } addWork(workIncrement); parentMonitor.internalWorked(workIncrement * parentTicks / totalWork); } /* * (non-Javadoc) * * @see org.eclipse.ui.internal.progress.JobTreeElement#getDisplayString(boolean) */ String getDisplayString(boolean showProgress) { if (totalWork == IProgressMonitor.UNKNOWN) { return unknownProgress(); } if (taskName == null) { return getDisplayStringWithoutTask(showProgress); } if (showProgress) { String[] messageValues = new String[3]; messageValues[0] = String.valueOf(getPercentDone()); messageValues[1] = jobInfo.getJob().getName(); messageValues[2] = taskName; return NLS .bind(ProgressMessages.get().JobInfo_DoneMessage, messageValues); } String[] messageValues = new String[2]; messageValues[0] = jobInfo.getJob().getName(); messageValues[1] = taskName; return NLS.bind(ProgressMessages.get().JobInfo_DoneNoProgressMessage, messageValues); } /** * Get the display String without the task name. * * @param showProgress * Whether or not we are showing progress * * @return String */ String getDisplayStringWithoutTask(boolean showProgress) { if (!showProgress || totalWork == IProgressMonitor.UNKNOWN) { return jobInfo.getJob().getName(); } return NLS.bind(ProgressMessages.get().JobInfo_NoTaskNameDoneMessage, jobInfo .getJob().getName(), String.valueOf(getPercentDone())); } /** * Return an integer representing the amount of work completed. If progress * is indeterminate return IProgressMonitor.UNKNOWN. * * @return int IProgressMonitor.UNKNOWN or a value between 0 and 100. */ int getPercentDone() { if (totalWork == IProgressMonitor.UNKNOWN) { return IProgressMonitor.UNKNOWN; } return Math.min((int) (preWork * 100 / totalWork), 100); } /** * Return the progress for a monitor whose totalWork is * <code>IProgressMonitor.UNKNOWN</code>. * * @return String */ private String unknownProgress() { if (taskName == null) { return jobInfo.getJob().getName(); } String[] messageValues = new String[2]; messageValues[0] = jobInfo.getJob().getName(); messageValues[1] = taskName; return NLS .bind(ProgressMessages.get().JobInfo_UnknownProgress, messageValues); } }